package InnerclassTestDemo;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 石方旭
 * Date: 2022-03-31
 * Time: 16:54
 */
class OutClass {
    public int ret = 9999;
    public String data1 = "厚积薄发1";
    public int data2 = 10;
    public double data3 = 0.5;
    public static int count = 15;
    public void eat() {
        System.out.println("我要吃饭！！！");
    }
    public void sleep() {
        System.out.println("我要睡觉！！！");
    }
    class InnerClass {
        public int ret = 9;
        public String data4 ="厚积薄发2";
        public int data5 = 520;
        public double data6 = 13.14;
        //当内部类成员和外部类成员重名的时候
        //访问内部成员------->就近原则在哪个类的里面就访问谁
        public void methodRet1() {
            //System.out.println(ret);
            //如果想要优先访问外部类的成员我们需要外部类类名.this.外部类成员
           System.out.println(OutClass.this.ret);
        }
        public void method7() {
            //内部类直接可以访问外部类成员
            System.out.println(data1);
            System.out.println(data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
            System.out.println(count);
        }

    }
    public void method1() {
        //外部类访问内部类的成员需要先创建内部类的对象
        InnerClass innerclass = new InnerClass();
        System.out.println(innerclass.data4);
        System.out.println(innerclass.data5);
        System.out.println(innerclass.data6);
        //System.out.println(innerclass.count1);
    }

    public void methodRet2() {
        System.out.println(ret);
    }
}

public class TestDemo {
    public static void main(String[] args) {
        //如何访问内部类成员
        //首先先要创建外部类的对象
        OutClass outclass = new OutClass();
        //创建内部类对象   这里的内部类相当于外部类的一个成员与外部类的成员是同一个等级的
        //外部类.内部类 变量名 = 外部类对象的引用. new 内部类对象
        OutClass.InnerClass innerClass = outclass.new InnerClass();
        //还可以一步到位
        OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();
        innerClass.method7();
        System.out.println("=============================");
        outclass.method1();
        System.out.println("=============================");
        innerClass.methodRet1();
        System.out.println("=============================");
        outclass.methodRet2();

    }
}
